home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic 4 Database How-To / Visual Basic 4 Database - How-to (The Waite Group)(1995).iso / indexes.fr_ / indexes.fr
Text File  |  1995-07-05  |  17KB  |  477 lines

  1. VERSION 4.00
  2. Begin VB.Form Form1 
  3.    BackColor       =   &H00C0C0C0&
  4.    Caption         =   "Index Creator"
  5.    ClientHeight    =   2880
  6.    ClientLeft      =   150
  7.    ClientTop       =   1410
  8.    ClientWidth     =   7725
  9.    BeginProperty Font 
  10.       name            =   "MS Sans Serif"
  11.       charset         =   0
  12.       weight          =   700
  13.       size            =   8.25
  14.       underline       =   0   'False
  15.       italic          =   0   'False
  16.       strikethrough   =   0   'False
  17.    EndProperty
  18.    Height          =   3285
  19.    Left            =   90
  20.    LinkTopic       =   "Form1"
  21.    ScaleHeight     =   2880
  22.    ScaleWidth      =   7725
  23.    Top             =   1065
  24.    Width           =   7845
  25.    Begin VB.ListBox lstTables 
  26.       Height          =   1815
  27.       Left            =   180
  28.       TabIndex        =   4
  29.       Top             =   660
  30.       Width           =   1695
  31.    End
  32.    Begin VB.CommandButton cmdCreateTable 
  33.       Caption         =   "--> Create &Table -->"
  34.       Enabled         =   0   'False
  35.       Height          =   1035
  36.       Left            =   2100
  37.       TabIndex        =   2
  38.       Top             =   900
  39.       Width           =   2055
  40.    End
  41.    Begin VB.CommandButton cmdClose 
  42.       Cancel          =   -1  'True
  43.       Caption         =   "Cl&ose"
  44.       Height          =   495
  45.       Left            =   2100
  46.       TabIndex        =   1
  47.       Top             =   2160
  48.       Width           =   2055
  49.    End
  50.    Begin VB.CommandButton cmdCreateDatabase 
  51.       Caption         =   "&Create &Database"
  52.       Height          =   495
  53.       Left            =   2100
  54.       TabIndex        =   0
  55.       Top             =   180
  56.       Width           =   2055
  57.    End
  58.    Begin VB.Label Label2 
  59.       AutoSize        =   -1  'True
  60.       BackColor       =   &H00C0C0C0&
  61.       Caption         =   "Created Tables, Fields, and Indexes:"
  62.       Height          =   195
  63.       Left            =   4380
  64.       TabIndex        =   6
  65.       Top             =   360
  66.       Width           =   3135
  67.    End
  68.    Begin VB.Label Label1 
  69.       AutoSize        =   -1  'True
  70.       BackColor       =   &H00C0C0C0&
  71.       Caption         =   "Available Tables:"
  72.       Height          =   195
  73.       Left            =   180
  74.       TabIndex        =   5
  75.       Top             =   360
  76.       Width           =   1485
  77.    End
  78.    Begin MSOutl.Outline outTablesAndFields 
  79.       Height          =   1995
  80.       Left            =   4380
  81.       TabIndex        =   3
  82.       Top             =   660
  83.       Width           =   3135
  84.       _Version        =   65536
  85.       _ExtentX        =   5530
  86.       _ExtentY        =   3519
  87.       _StockProps     =   77
  88.       BackColor       =   16777215
  89.       PicturePlus     =   "INDEXES.frx":0000
  90.       PictureMinus    =   "INDEXES.frx":0172
  91.       PictureLeaf     =   "INDEXES.frx":02E4
  92.       PictureOpen     =   "INDEXES.frx":0456
  93.       PictureClosed   =   "INDEXES.frx":05C8
  94.    End
  95.    Begin MSComDlg.CommonDialog CommonDialog1 
  96.       Left            =   1620
  97.       Top             =   60
  98.       _Version        =   65536
  99.       _ExtentX        =   847
  100.       _ExtentY        =   847
  101.       _StockProps     =   0
  102.       CancelError     =   -1  'True
  103.       DefaultExt      =   "MDB"
  104.       DialogTitle     =   "Create New Database"
  105.       Filter          =   "Microsoft Acccess (*.MDB)|*.MDB"
  106.       Flags           =   5000
  107.    End
  108. End
  109. Attribute VB_Name = "Form1"
  110. Attribute VB_Creatable = False
  111. Attribute VB_Exposed = False
  112. Option Explicit
  113.  
  114. ' Declare the text field lengths as constants
  115. Private Const LEN_Customer_Name = 40
  116. Private Const LEN_Street_Address = 80
  117. Private Const LEN_City = 25
  118. Private Const LEN_State = 2
  119. Private Const LEN_Zip_Code = 10
  120. Private Const LEN_Country = 25
  121. Private Const LEN_Item_Number = 16
  122. Private Const LEN_Item_Description = 100
  123.  
  124. ' Declare the database at form level.
  125. Dim db As DATABASE
  126.  
  127. Private Sub cmdCreateDatabase_Click()
  128.     Dim fn As String
  129.     Dim tblDef As TableDef
  130.     
  131.     On Error GoTo CreateError
  132.     
  133.     ' Set the filename to a null string and display the common dialog box.
  134.     CommonDialog1.filename = ""
  135.     CommonDialog1.ShowSave
  136.  
  137.     ' The user entered a filename for the new database. Assign it to the variable fn.
  138.     Screen.MousePointer = 11
  139.     fn = CommonDialog1.filename
  140.  
  141.     ' Create the new database file.
  142.     Set db = DBEngine.Workspaces(0).CreateDatabase(fn, dbLangGeneral)
  143.     Screen.MousePointer = 0
  144.  
  145.     ' Verify that the file now exists on disk.
  146.     If Dir(fn) = CommonDialog1.FileTitle Then
  147.     
  148.         ' The file exists, so display a message.
  149.         Form1.Caption = "Index Creator for " & UCase$(fn)
  150.         
  151.         ' Clear the existing list and outline
  152.         lstTables.Clear
  153.         outTablesAndFields.Clear
  154.         
  155.         ' Fill the list box with the sample tables
  156.         lstTables.AddItem "Customers"
  157.         lstTables.AddItem "Items"
  158.         lstTables.AddItem "Order Items"
  159.         lstTables.AddItem "Orders"
  160.         
  161.         ' If a table already exists in the database, remove it from the
  162.         ' list and add it to the outline.
  163.         For Each tblDef In db.TableDefs
  164.             Select Case tblDef.Name
  165.                 Case "Customers"
  166.                     RemoveFromList "Customers"
  167.                     AddToOutline "Customers"
  168.                 Case "Orders"
  169.                     RemoveFromList "Orders"
  170.                     AddToOutline "Orders"
  171.                 Case "Items"
  172.                     RemoveFromList "Items"
  173.                     AddToOutline "Items"
  174.                 Case "Order Items"
  175.                     RemoveFromList "Order Items"
  176.                     AddToOutline "Order Items"
  177.                 Case Else
  178.             End Select
  179.         Next
  180.             
  181.         ' Enable the Create Table features.
  182.         cmdCreateTable.Enabled = True
  183.     Else
  184.         MsgBox "Could not create " & fn, vbExclamation
  185.     End If
  186. Exit Sub
  187.  
  188. CreateError:
  189.     Screen.MousePointer = 0
  190.     If Err.Number = 32755 Then
  191.         ' The user cancelled the dialog box, so do nothing.
  192.     Else
  193.         ' Some other error, so show the user the description.
  194.         MsgBox Err.Description
  195.     End If
  196. Exit Sub
  197. End Sub
  198.  
  199. Private Sub cmdCreateTable_Click()
  200.     Dim tableName As String
  201.     Dim tblDef As TableDef
  202.     
  203.     On Error GoTo TableCreateError
  204.     
  205.     If lstTables.ListIndex > -1 Then
  206.     
  207.         ' The user has a table selected, so create a new table definition
  208.         ' in the database with the name of the table.
  209.         Screen.MousePointer = 11
  210.         Set tblDef = db.CreateTableDef(lstTables.TEXT)
  211.         
  212.         ' Now add the appropriate fields to the table.
  213.         AddFields tblDef
  214.        
  215.         ' Next the primary key to the table.
  216.         AddPrimaryKey tblDef
  217.         
  218.         ' Add other indexes
  219.         AddOtherIndexes tblDef
  220.         
  221.         ' With all the fields in place, append the table defintion to the database.
  222.         db.TableDefs.Append tblDef
  223.         
  224.         ' Take the list off the list of available tables.
  225.         tableName = lstTables.TEXT
  226.         RemoveFromList tableName
  227.         
  228.         ' Put the table and its fields into the outline of tables in the database.
  229.         AddToOutline tableName
  230.     End If
  231.     Screen.MousePointer = 0
  232.     
  233. Exit Sub
  234.  
  235. TableCreateError:
  236.     Screen.MousePointer = 0
  237.     MsgBox Err.Description
  238. Exit Sub
  239.  
  240. End Sub
  241. Sub AddFields(tblDef As TableDef)
  242.  
  243.     Dim fldDef As Field
  244.     
  245.     ' For each field, first create the field TableDef
  246.     ' Then add it to the field list for the table
  247.     Select Case tblDef.Name
  248.         Case "Customers"
  249.             Set fldDef = tblDef.CreateField("Customer Number", dbLong)
  250.             tblDef.Fields.Append fldDef
  251.             Set fldDef = tblDef.CreateField("Customer Name", dbText, LEN_Customer_Name)
  252.             tblDef.Fields.Append fldDef
  253.             Set fldDef = tblDef.CreateField("Street Address", dbText, LEN_Street_Address)
  254.             tblDef.Fields.Append fldDef
  255.             Set fldDef = tblDef.CreateField("City", dbText, LEN_City)
  256.             tblDef.Fields.Append fldDef
  257.             Set fldDef = tblDef.CreateField("State", dbText, LEN_State)
  258.             tblDef.Fields.Append fldDef
  259.             Set fldDef = tblDef.CreateField("Zip Code", dbText, LEN_Zip_Code)
  260.             tblDef.Fields.Append fldDef
  261.             Set fldDef = tblDef.CreateField("Country", dbText, LEN_Country)
  262.             tblDef.Fields.Append fldDef
  263.         Case "Items"
  264.             Set fldDef = tblDef.CreateField("Item Number", dbText, LEN_Item_Number)
  265.             tblDef.Fields.Append fldDef
  266.             Set fldDef = tblDef.CreateField("Item Description", dbText, LEN_Item_Description)
  267.             tblDef.Fields.Append fldDef
  268.             Set fldDef = tblDef.CreateField("Price Each", dbCurrency)
  269.             tblDef.Fields.Append fldDef
  270.         Case "Orders"
  271.             Set fldDef = tblDef.CreateField("Customer Number", dbLong)
  272.             tblDef.Fields.Append fldDef
  273.             Set fldDef = tblDef.CreateField("Order Number", dbLong)
  274.             tblDef.Fields.Append fldDef
  275.             Set fldDef = tblDef.CreateField("Order Date", dbDate)
  276.             tblDef.Fields.Append fldDef
  277.             Set fldDef = tblDef.CreateField("Ship Date", dbDate)
  278.             tblDef.Fields.Append fldDef
  279.             Set fldDef = tblDef.CreateField("Tax", dbCurrency)
  280.             tblDef.Fields.Append fldDef
  281.             Set fldDef = tblDef.CreateField("Shipping Charge", dbCurrency)
  282.             tblDef.Fields.Append fldDef
  283.         Case "Order Items"
  284.             Set fldDef = tblDef.CreateField("Order Number", dbLong)
  285.             tblDef.Fields.Append fldDef
  286.             Set fldDef = tblDef.CreateField("Item Number", dbText, LEN_Item_Number)
  287.             tblDef.Fields.Append fldDef
  288.             Set fldDef = tblDef.CreateField("Quantity", dbLong)
  289.             tblDef.Fields.Append fldDef
  290.     End Select
  291.  
  292. End Sub
  293. Sub AddPrimaryKey(tblDef As TableDef)
  294.     Dim idx As Index
  295.     Dim idxField1 As Field, idxField2 As Field
  296.     
  297.     ' Create the index.
  298.     Set idx = tblDef.CREATEINDEX("PrimaryKey")
  299.     
  300.     ' Define the field(s) for the index
  301.     Select Case tblDef.Name
  302.         Case "Customers"
  303.             Set idxField1 = idx.CreateField("Customer Number")
  304.         Case "Items"
  305.             Set idxField1 = idx.CreateField("Item Number")
  306.         Case "Orders"
  307.             Set idxField1 = idx.CreateField("Order Number")
  308.         Case "Order Items"
  309.             Set idxField1 = idx.CreateField("Order Number")
  310.             Set idxField2 = idx.CreateField("Item Number")
  311.     End Select
  312.     idx.Fields.Append idxField1
  313.     If tblDef.Name = "Order Items" Then idx.Fields.Append idxField2
  314.     
  315.     idx.PRIMARY = True
  316.     tblDef.Indexes.Append idx
  317. End Sub
  318. Sub AddOtherIndexes(tblDef As TableDef)
  319.     Dim idx As Index
  320.     Dim idxField1 As Field, idxField2 As Field
  321.     
  322.     
  323.     ' Create the indexes, define the field(s) and properties
  324.     Select Case tblDef.Name
  325.     
  326.         Case "Customers"
  327.         
  328.             ' Define the Customer Name index as a required index.
  329.             Set idx = tblDef.CREATEINDEX("Customer Name")
  330.             Set idxField1 = idx.CreateField("Customer Name")
  331.             idx.Fields.Append idxField1
  332.             idx.Required = True
  333.             tblDef.Indexes.Append idx
  334.             
  335.             ' Define the City And State index as a required index.
  336.             Set idx = tblDef.CREATEINDEX("City And State")
  337.             Set idxField1 = idx.CreateField("State")
  338.             Set idxField2 = idx.CreateField("City")
  339.             idx.Fields.Append idxField1
  340.             idx.Fields.Append idxField2
  341.             idx.Required = True
  342.             tblDef.Indexes.Append idx
  343.             
  344.             ' Define the Zip index as a required index.
  345.             Set idx = tblDef.CREATEINDEX("Zip")
  346.             Set idxField1 = idx.CreateField("Zip Code")
  347.             idx.Fields.Append idxField1
  348.             idx.Required = True
  349.             tblDef.Indexes.Append idx
  350.             
  351.         Case "Items"
  352.         
  353.             ' Define the City And State index as a required and unique index.
  354.             Set idx = tblDef.CREATEINDEX("Item Description")
  355.             Set idxField1 = idx.CreateField("Item Description")
  356.             idx.Fields.Append idxField1
  357.             idx.Required = True
  358.             idx.UNIQUE = True
  359.             tblDef.Indexes.Append idx
  360.             
  361.         Case "Orders"
  362.         
  363.             ' Define the Customer Number index as a required index.
  364.             Set idx = tblDef.CREATEINDEX("Customer Number")
  365.             Set idxField1 = idx.CreateField("Customer Number")
  366.             idx.Fields.Append idxField1
  367.             idx.Required = True
  368.             tblDef.Indexes.Append idx
  369.             
  370.             ' Define the Order Date index as a required index.
  371.             Set idx = tblDef.CREATEINDEX("Order Date")
  372.             Set idxField1 = idx.CreateField("Order Date")
  373.             idx.Fields.Append idxField1
  374.             idx.Required = True
  375.             tblDef.Indexes.Append idx
  376.             
  377.             ' Define the Ship Date index as a non-required index.
  378.             Set idx = tblDef.CREATEINDEX("Ship Date")
  379.             Set idxField1 = idx.CreateField("Ship Date")
  380.             idx.Fields.Append idxField1
  381.             tblDef.Indexes.Append idx
  382.             
  383.         Case "Order Items"
  384.         
  385.             ' Define the Item Number index.
  386.             ' The field is already part of the Primary Key, so no need to define it as required.
  387.             Set idx = tblDef.CREATEINDEX("Item Number")
  388.             Set idxField1 = idx.CreateField("Item Number")
  389.             idx.Fields.Append idxField1
  390.             tblDef.Indexes.Append idx
  391.             
  392.             ' Define the Order Number index.
  393.             ' The field is already part of the Primary Key, so no need to define it as required.
  394.             Set idx = tblDef.CREATEINDEX("Order Number")
  395.             Set idxField1 = idx.CreateField("Order Number")
  396.             idx.Fields.Append idxField1
  397.             tblDef.Indexes.Append idx
  398.             
  399.     End Select
  400. End Sub
  401.  
  402.  
  403. Private Sub lstTables_DblClick()
  404.     cmdCreateTable_Click
  405. End Sub
  406. Sub RemoveFromList(tableName As String)
  407.     Dim i As Integer
  408.     
  409.     ' Find the table passed as the argument in the list and remove it from the list.
  410.     For i = 0 To lstTables.ListCount - 1
  411.         If lstTables.List(i) = tableName Then
  412.             lstTables.RemoveItem i
  413.             Exit For
  414.         End If
  415.     Next i
  416.     
  417. End Sub
  418. Sub AddToOutline(tableName As String)
  419.     Dim tableIndex As Integer
  420.     Dim headerIndex As Integer
  421.     Dim subHeaderIndex As Integer
  422.     Dim tblDef As TableDef
  423.     Dim idx As Index
  424.     Dim i As Integer, j As Integer
  425.     Dim trailer As String
  426.  
  427.     ' Indicate that the table name is to be added at the top level of the outline.
  428.     outTablesAndFields.ListIndex = -1
  429.     
  430.     ' Add the table to the outline.
  431.     outTablesAndFields.AddItem tableName
  432.     
  433.     ' Store the just-added table's ListIndex property in a variable.
  434.     tableIndex = outTablesAndFields.ListCount - 1
  435.     Set tblDef = db.TableDefs(tableName)
  436.     
  437.     ' Add each field in the table to the outline as a subitem of the table name.
  438.     outTablesAndFields.ListIndex = tableIndex
  439.     outTablesAndFields.AddItem "Fields"
  440.     headerIndex = outTablesAndFields.ListCount - 1
  441.     For i = 0 To tblDef.Fields.Count - 1
  442.         outTablesAndFields.ListIndex = headerIndex
  443.         outTablesAndFields.AddItem tblDef.Fields(i).Name
  444.     Next i
  445.     
  446.     ' Add each index in the table to the outline as a subitem of the table name.
  447.     outTablesAndFields.ListIndex = tableIndex
  448.     outTablesAndFields.AddItem "Indexes"
  449.     headerIndex = outTablesAndFields.ListCount - 1
  450.     For i = 0 To tblDef.Indexes.Count - 1
  451.         outTablesAndFields.ListIndex = headerIndex
  452.         Set idx = tblDef.Indexes(i)
  453.         If idx.PRIMARY Then
  454.             trailer = " [P]"
  455.         ElseIf idx.Required And idx.UNIQUE Then
  456.             trailer = " [R,U]"
  457.         ElseIf idx.Required Then
  458.             trailer = " [R]"
  459.         ElseIf idx.UNIQUE Then
  460.             trailer = " [U]"
  461.         Else
  462.             trailer = ""
  463.         End If
  464.         outTablesAndFields.AddItem idx.Name & trailer
  465.         subHeaderIndex = outTablesAndFields.ListCount - 1
  466.         For j = 0 To idx.Fields.Count - 1
  467.             outTablesAndFields.ListIndex = subHeaderIndex
  468.             outTablesAndFields.AddItem idx.Fields(j).Name
  469.         Next j
  470.     Next i
  471.  
  472. End Sub
  473. Private Sub cmdClose_Click()
  474.     End
  475. End Sub
  476.  
  477.